package ar.edu.utn.frba.tadp.tp.grupo4.fotomultas_ui.ui;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.Selector;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;
import org.uqbar.commons.utils.ApplicationContext;
import org.uqbar.commons.utils.Home;

import ar.edu.utn.frba.tadp.tp.grupo4.fotomultas.capturas.Captura;
import ar.edu.utn.frba.tadp.tp.grupo4.fotomultas.capturas.Image;
import ar.edu.utn.frba.tadp.tp.grupo4.fotomultas.capturas.TipoInfraccion;
import ar.edu.utn.frba.tadp.tp.grupo4.fotomultas.capturas.Zona;
import ar.edu.utn.frba.tadp.tp.grupo4.fotomultas_ui.CreacionCaptura;

@SuppressWarnings("serial")
public class CreacionCapturaWindow extends SimpleWindow<CreacionCaptura>{

	public static final String CREAR_CAPTURA = "crearCaptura";

	public CreacionCapturaWindow(WindowOwner parent, Home<Captura> capturasHome) {
		super(parent, new CreacionCaptura(capturasHome));
		setTaskDescription("Creación de una captura");
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		Panel editor = new Panel(mainPanel);
		editor.setLayout(new ColumnLayout(2));

		new Label(editor).setText("TipoInfraccion");
		new Selector(editor)
		//
			.setContents(this.getList(TipoInfraccion.class), TipoInfraccion.NOMBRE)
			.allowNull(false)
			.bindValueToProperty(CreacionCaptura.TIPOINFRACCION);

		new Label(editor).setText("Zona");
		new Selector(editor)
		//
			.setContents(this.getList(Zona.class), Zona.NOMBRE)
			.allowNull(false)
			.bindValueToProperty(CreacionCaptura.ZONA);
		
		new Label(editor).setText("Imagen");
		new Selector(editor)
		//
			.setContents(this.getList(Image.class), Image.NOMBRE)
			.allowNull(false)
			.bindValueToProperty(CreacionCaptura.IMAGE);
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel)
		//
			.setAsDefault()
			.disableOnError()
			.setCaption("Capturar")
			.onClick(new MessageSend(this, CreacionCapturaWindow.CREAR_CAPTURA));
	}

	// ********************************************************
	// ** Acciones
	// ********************************************************

	public void crearCaptura() {
		if(verificarCampos()){
			getModel().crearCaptura();
			close();			
		}
		else{
			MessageBox msg = new MessageBox(new Shell());
			msg.setMessage("No selecciono todos los campos requeridos.");
			msg.open();
		}
	}

	// ********************************************************
	// ** Listas para selectores
	// ********************************************************

	private <T> List<T> getList(Class<T> type) {
		Home<T> home = ApplicationContext.getInstance().getHome(type);

		List<T> objects = new ArrayList<T>();
		objects.addAll(home.getObjects());

		return objects;
	}
	
	// ********************************************************
	// ** Verificacion de campos
	// ********************************************************

	private boolean verificarCampos(){
		return (getModel().getImage() != null && getModel().getTipoInfraccion() != null && getModel().getZona() != null);
	}
}
